Objetivo_3#
import pandas as pd
import numpy as np
import plotly.express as px
import altair as alt
import datos
import plotly.graph_objects as go
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning
)
Hipolipemiantes segun agrupaciones#
agrupaciones = ['sexo','tipo_de_afiliacion','edad_grupo','lugar_de_nacimiento','lugar_de_procedencia'] + ['hipertension','infarto de miocardio','arritmia','insuficiencia cardiaca congestiva','nefropatia']+['fumador','bebedor']
variable = 'Hipolipemiante'
edad_intervals = [0, 49, 59, 79, 150]
edad_labels = ['<50', '50-59', '60-79', '>80']
datos.datos['edad_grupo'] = pd.cut(datos.datos['edad_calculada'], bins=edad_intervals, labels=edad_labels, right=False)
for agrupacion in agrupaciones:
tabla_frecuencias = pd.crosstab(datos.datos[agrupacion], datos.datos[variable])
# Crear la tabla usando plotly.graph_objects
fig = go.Figure(data=[go.Table(
header=dict(values=['Categoría'] + list(tabla_frecuencias.columns),
fill_color='paleturquoise',
align='center'),
cells=dict(values=[tabla_frecuencias.index] + [tabla_frecuencias[col] for col in tabla_frecuencias.columns],
fill_color='lavender',
align='center'))
])
fig.update_layout(title=f'Tabla de Frecuencias: {agrupacion} vs {variable}')
fig.show()
variables : ‘IMC’,’POC_hba1c(%)’,’perimetro_abdominal’,’presion_arterial_sistolica’,’presion_arterial_diastolica’ por#
por :’sexo’,’edad_grupo’,’tipo_de_afiliaciion’,’lugar_de_nacimiento’,’lugar_de_procedencia’#
import pandas as pd
import plotly.graph_objects as go
# Definir intervalos para diferentes variables
hb1a_interv = {
'POC_hba1c(%)': [0, 5.7, 6.4, 7.5, 10, max(datos.datos['POC_hba1c(%)']) + 4]
}
pres_sist = {
'masculino': [0, 120, 130, 139, max(datos.datos['presion_arterial_sistolica'])],
'femenino': [0, 120, 130, 139, max(datos.datos['presion_arterial_sistolica'])]
}
IMC_interv = {
'IMC': [0, 19.9, 24.9, 29.9, 40, max(datos.datos['IMC']) + 1]
}
per_inter = {
'masculino': [0, 94, 102, max(datos.datos['perimetro_abdominal'])],
'femenino': [0, 80, 88, max(datos.datos['perimetro_abdominal'])]
}
pres_diast = {
'masculino': [0, 80, 90, 120, max(datos.datos['presion_arterial_diastolica'])],
'femenino': [0, 80, 90, 120, max(datos.datos['presion_arterial_diastolica'])]
}
# Aplicar intervalos personalizados a las variables
datos.datos['POC_hba1c_intervalo'] = pd.cut(datos.datos['POC_hba1c(%)'], bins=hb1a_interv['POC_hba1c(%)'])
datos.datos['IMC_intervalo'] = pd.cut(datos.datos['IMC'], bins=IMC_interv['IMC'])
datos.datos['perimetro_abdominal_intervalo'] = pd.cut(datos.datos['perimetro_abdominal'], bins=per_inter['masculino']) # Aquí podrías diferenciar entre masculino/femenino si es necesario
datos.datos['presion_arterial_sistolica_intervalo'] = pd.cut(datos.datos['presion_arterial_sistolica'], bins=pres_sist['masculino']) # Aquí podrías diferenciar entre masculino/femenino si es necesario
datos.datos['presion_arterial_diastolica_intervalo'] = pd.cut(datos.datos['presion_arterial_diastolica'], bins=pres_diast['masculino']) # Diferenciar según género si lo deseas
# Definir las variables agrupadas
agrupaciones = ['sexo', 'edad_grupo', 'tipo_de_afiliacion', 'lugar_de_nacimiento', 'lugar_de_procedencia']
variables = ['IMC_intervalo', 'POC_hba1c_intervalo', 'perimetro_abdominal_intervalo', 'presion_arterial_sistolica_intervalo', 'presion_arterial_diastolica_intervalo']
# Crear tablas de frecuencias cruzadas y visualizarlas en Plotly
for variable in variables:
for agrupacion in agrupaciones:
# Calcular la tabla de frecuencias cruzadas
tabla_frecuencias = pd.crosstab(datos.datos[agrupacion], datos.datos[variable])
# Crear la tabla usando plotly.graph_objects
fig = go.Figure(data=[go.Table(
header=dict(values=['Categoría'] + list(tabla_frecuencias.columns.astype(str)),
fill_color='paleturquoise',
align='center'),
cells=dict(values=[tabla_frecuencias.index] + [tabla_frecuencias[col] for col in tabla_frecuencias.columns],
fill_color='lavender',
align='center'))
])
# Actualizar el layout y mostrar el gráfico
fig.update_layout(title=f'Tabla de Frecuencias: {agrupacion} vs {variable}')
fig.show()
‘IMC’,’POC_hba1c(%)’,’perimetro_abdominal’,’presion_arterial_sistolica’,’presion_arterial_diastolica’#
por ‘hipertension’,’infarto de miocardio’,’arritmia’,’insuficiencia cardiaca congestiva’,’nefropatia’#
agrupaciones = ['hipertension','infarto de miocardio','arritmia','insuficiencia cardiaca congestiva','nefropatia']
variables = ['IMC','POC_hba1c(%)','perimetro_abdominal','presion_arterial_sistolica','presion_arterial_diastolica']
# Definir las agrupaciones y variables
agrupaciones = ['hipertension', 'infarto de miocardio', 'arritmia', 'insuficiencia cardiaca congestiva', 'nefropatia']
variables = ['IMC', 'POC_hba1c(%)', 'perimetro_abdominal', 'presion_arterial_sistolica', 'presion_arterial_diastolica']
# Iterar sobre cada combinación de agrupación y variable
for agrupacion in agrupaciones:
for variable in variables:
# Agrupar la variable en función de los intervalos definidos
if variable == 'IMC':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], IMC_interv['IMC'])
elif variable == 'POC_hba1c(%)':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], hb1a_interv['POC_hba1c(%)'])
elif variable == 'presion_arterial_sistolica':
if agrupacion == 'masculino':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_sist['masculino'])
else:
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_sist['femenino'])
elif variable == 'perimetro_abdominal':
if agrupacion == 'masculino':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], per_inter['masculino'])
else:
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], per_inter['femenino'])
elif variable == 'presion_arterial_diastolica':
if agrupacion == 'masculino':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_diast['masculino'])
else:
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_diast['femenino'])
# Crear una tabla agrupada
df_grouped = datos.datos.groupby([agrupacion, variable + '_grupo']).size().reset_index(name='counts')
# Treemap
fig_treemap = px.treemap(df_grouped, path=[agrupacion, variable + '_grupo'], values='counts',
title=f'Treemap de {agrupacion} vs {variable}')
fig_treemap.show()
# Barras Dobles (Agrupadas)
fig_barras_dobles = px.bar(df_grouped, x=agrupacion, y='counts', color=variable + '_grupo',
title=f'Barras Dobles de {agrupacion} vs {variable}', barmode='group')
fig_barras_dobles.show()
# Barras Apiladas (Compiladas)
fig_barras_apiladas = px.bar(df_grouped, x=agrupacion, y='counts', color=variable + '_grupo',
title=f'Barras Apiladas de {agrupacion} vs {variable}', barmode='stack')
fig_barras_apiladas.show()
agrupaciones = ['hipertension', 'infarto de miocardio', 'arritmia', 'insuficiencia cardiaca congestiva', 'nefropatia']
variables = ['IMC', 'POC_hba1c(%)', 'perimetro_abdominal', 'presion_arterial_sistolica', 'presion_arterial_diastolica']
# Definir las agrupaciones y variables
agrupaciones = ['hipertension', 'infarto de miocardio', 'arritmia', 'insuficiencia cardiaca congestiva', 'nefropatia']
variables = ['IMC', 'POC_hba1c(%)', 'perimetro_abdominal', 'presion_arterial_sistolica', 'presion_arterial_diastolica']
# Iterar sobre cada combinación de agrupación y variable
for agrupacion in agrupaciones:
for variable in variables:
# Agrupar la variable en función de los intervalos definidos
if variable == 'IMC':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], IMC_interv['IMC'])
elif variable == 'POC_hba1c(%)':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], hb1a_interv['POC_hba1c(%)'])
elif variable == 'presion_arterial_sistolica':
if agrupacion == 'masculino':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_sist['masculino'])
else:
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_sist['femenino'])
elif variable == 'perimetro_abdominal':
if agrupacion == 'masculino':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], per_inter['masculino'])
else:
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], per_inter['femenino'])
elif variable == 'presion_arterial_diastolica':
if agrupacion == 'masculino':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_diast['masculino'])
else:
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_diast['femenino'])
# Crear una tabla agrupada
df_grouped = datos.datos.groupby([agrupacion, variable + '_grupo']).size().reset_index(name='counts')
# Treemap
fig_treemap = px.treemap(df_grouped, path=[agrupacion, variable + '_grupo'], values='counts',
title=f'Treemap de {agrupacion} vs {variable}')
fig_treemap.show()
# Barras Dobles (Agrupadas)
fig_barras_dobles = px.bar(df_grouped, x=agrupacion, y='counts', color=variable + '_grupo',
title=f'Barras Dobles de {agrupacion} vs {variable}', barmode='group')
fig_barras_dobles.show()
# Barras Apiladas (Compiladas)
fig_barras_apiladas = px.bar(df_grouped, x=agrupacion, y='counts', color=variable + '_grupo',
title=f'Barras Apiladas de {agrupacion} vs {variable}', barmode='stack')
fig_barras_apiladas.show()
‘IMC’,’POC_hba1c(%)’,’perimetro_abdominal’,’presion_arterial_sistolica’,’presion_arterial_diastolica’#
por ‘fumador’,’bebedor’#
import plotly.io as pio
pio.renderers.default = 'notebook'
hb1a_interv = {'POC_hba1c(%)': [0, 5.7, 6.4, 7.5, 10, max(datos.datos['POC_hba1c(%)']) + 4]}
pres_sist = {'masculino': [0, 120, 130, 139, max(datos.datos['presion_arterial_sistolica'])],
'femenino': [0, 120, 130, 139, max(datos.datos['presion_arterial_sistolica'])]}
IMC_interv = {'IMC': [0, 19.9, 24.9, 29.9, 40, max(datos.datos['IMC']) + 1]}
per_inter = {'masculino': [0, 94, 102, max(datos.datos['perimetro_abdominal'])],
'femenino': [0, 80, 88, max(datos.datos['perimetro_abdominal'])]}
pres_diast = {'masculino': [0, 80, 90, 120, max(datos.datos['presion_arterial_diastolica'])],
'femenino': [0, 80, 90, 120, max(datos.datos['presion_arterial_diastolica'])]}
agrupaciones = ['fumador', 'bebedor']
variables = ['IMC', 'POC_hba1c(%)', 'perimetro_abdominal', 'presion_arterial_sistolica', 'presion_arterial_diastolica']
# Iterar sobre cada combinación de agrupación y variable
for agrupacion in agrupaciones:
for variable in variables:
# Agrupar la variable en función de los intervalos definidos
if variable == 'IMC':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], IMC_interv['IMC'])
elif variable == 'POC_hba1c(%)':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], hb1a_interv['POC_hba1c(%)'])
elif variable == 'presion_arterial_sistolica':
if datos.datos['sexo'].iloc[0] == 'masculino':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_sist['masculino'])
else:
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_sist['femenino'])
elif variable == 'perimetro_abdominal':
if datos.datos['sexo'].iloc[0] == 'masculino':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], per_inter['masculino'])
else:
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], per_inter['femenino'])
elif variable == 'presion_arterial_diastolica':
if datos.datos['sexo'].iloc[0] == 'masculino':
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_diast['masculino'])
else:
datos.datos[variable + '_grupo'] = pd.cut(datos.datos[variable], pres_diast['femenino'])
# Crear una tabla agrupada
df_grouped = datos.datos.groupby([agrupacion, variable + '_grupo']).size().reset_index(name='counts')
# Treemap
fig_treemap = px.treemap(df_grouped, path=[agrupacion, variable + '_grupo'], values='counts',
title=f'Treemap de {agrupacion} vs {variable}')
fig_treemap.show()
# Barras Dobles (Agrupadas)
fig_barras_dobles = px.bar(df_grouped, x=agrupacion, y='counts', color=variable + '_grupo',
title=f'Barras Dobles de {agrupacion} vs {variable}', barmode='group')
fig_barras_dobles.show()
# Barras Apiladas (Compiladas)
fig_barras_apiladas = px.bar(df_grouped, x=agrupacion, y='counts', color=variable + '_grupo',
title=f'Barras Apiladas de {agrupacion} vs {variable}', barmode='stack')
fig_barras_apiladas.show()
import plotly.graph_objects as go
import pandas as pd
import plotly.io as pio
pio.renderers.default = 'notebook'
medicamentos = {
'Hipolipemiante': [
'alirocumab', 'Acido fenofibrico', 'Atorvastatina', 'Colestiramina', 'Evolocumab',
'Ezetimibe', 'Fenofibrato', 'Lovastatina'
],
'Antidiabético': [
'Dapagliflozina', 'Dulaglutida', 'Empagliflozina', 'Glibenclamida', 'Glimepirida'
],
'Insulina': [
'Insulina', 'Glargina', 'Glulisina', 'Insulina detemir', 'Insulina Glargina',
'Insulina lispro', 'Degludec', 'Lantus'
]
}
def contar_medicamentos(datos, grupo, medicamentos_lista):
conteo_medicamentos = []
medicamentos_filtrados = [med for med in medicamentos_lista if med in datos.columns]
for med in medicamentos_filtrados:
conteo = list(datos[med]).count('si')
conteo_medicamentos.append({'Grupo': grupo, 'Medicamento': med, 'Conteo': conteo})
return pd.DataFrame(conteo_medicamentos)
def graficar_frecuencias(grupo, df_conteos):
fig = px.bar(df_conteos, x='Medicamento', y='Conteo', title=f'Frecuencia de Medicamentos - {grupo}')
fig.show()
# Generar y graficar las frecuencias para cada grupo de medicamentos
for grupo, medicamentos_lista in medicamentos.items():
conteos_df = contar_medicamentos(datos.datos, grupo, medicamentos_lista)
graficar_frecuencias(grupo, conteos_df)